package plateau;

import structureDeDonnee.Cell;
import structureDeDonnee.Matrice;
import structureDeDonnee.Position;

/**
 * 
 * class implémentant plateau avec les règles d'un monde fermé.
 * C'est à dire: les cellules sur les bords n'ont pas
 * de voisin vers l'exterieur.
 */
public class PlateauFerme extends PlateauFini {

	/**
	 * 
	 * @param matrice
	 * @param valeursDeSurvie
	 * @param valeursDeNaissance
	 * @param x
	 * @param y
	 * @throws CelluleHorsPlateauException
	 */
	public PlateauFerme(Matrice matrice, int[] valeursDeSurvie,
			int[] valeursDeNaissance, int y, int x)
			throws CelluleHorsPlateauException {
		super(matrice, valeursDeSurvie, valeursDeNaissance, y, x);
	}

	/**
	 * constructeur
	 * recopie la hauteur la largeur et la liste des cellules vivantes d'un plateau fini
	 * @param plateau un plateau fini 
	 */
	public PlateauFerme(PlateauFini plateau) {
		super(plateau);
	}

	@Override
	public boolean estUneTranslation(Matrice matriceAComparer, Position p) {
		return false;
	}

	@Override
	public PlateauFerme clone() {
		return new PlateauFerme(this);
	}

	@Override
	protected void ajouteCelluleMatricesVoisines( Cell tmp, Matrice[] tab) {
		int posXCell = tmp.getPosition().getX();
		int posYCell = tmp.getPosition().getY();
		Cell tmp1 = new Cell(1, posXCell - 1, posYCell + 1);
		Cell tmp2 = new Cell(1, posXCell, posYCell + 1);
		Cell tmp3 = new Cell(1, posXCell + 1, posYCell + 1);
		Cell tmp4 = new Cell(1, posXCell - 1, posYCell);
		Cell tmp5 = new Cell(9, posXCell, posYCell);
		Cell tmp6 = new Cell(1, posXCell + 1, posYCell);
		Cell tmp7 = new Cell(1, posXCell - 1, posYCell - 1);
		Cell tmp8 = new Cell(1, posXCell, posYCell - 1);
		Cell tmp9 = new Cell(1, posXCell + 1, posYCell - 1);
		if (!enDehorsPlateau(tmp1)) {
			tab[0].add(tmp1);
		}
		if (!enDehorsPlateau(tmp2)) {
			tab[1].add(tmp2);
		}
		if (!enDehorsPlateau(tmp3)) {
			tab[2].add(tmp3);
		}
		if (!enDehorsPlateau(tmp4)) {
			tab[3].add(tmp4);
		}
		if (!enDehorsPlateau(tmp5)) {
			tab[4].add(tmp5);
		}
		if (!enDehorsPlateau(tmp6)) {
			tab[5].add(tmp6);
		}
		if (!enDehorsPlateau(tmp7)) {
			tab[6].add(tmp7);
		}
		if (!enDehorsPlateau(tmp8)) {
			tab[7].add(tmp8);
		}
		if (!enDehorsPlateau(tmp9)) {
			tab[8].add(tmp9);
		}
	}



}
